<?xml version="1.0" encoding="utf-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://www.w3.org/ns/wsdl" targetNamespace="http://www.w3.org/ns/wsdl" elementFormDefault="qualified" finalDefault="" blockDefault=""  attributeFormDefault="unqualified"> 
 
  <xs:element name="documentation" type="wsdl:DocumentationType"/> 
  <xs:complexType name="DocumentationType" mixed="true"> 
    <xs:sequence> 
      <xs:any processContents="lax" minOccurs="0" namespace="##any"/> 
    </xs:sequence> 
    <xs:anyAttribute namespace="##other" processContents="lax"/> 
  </xs:complexType> 
 
  <xs:complexType name="DocumentedType" mixed="false"> 
    <xs:annotation> 
      <xs:documentation> 
      This type is extended by component types to allow them to be documented.
      </xs:documentation> 
    </xs:annotation> 
    <xs:sequence> 
      <xs:element ref="wsdl:documentation" minOccurs="0" maxOccurs="unbounded"/> 
    </xs:sequence> 
  </xs:complexType> 
 
  <xs:complexType name="ExtensibleDocumentedType" abstract="true" mixed="false"> 
    <xs:annotation> 
      <xs:documentation> 
      This type is extended by component types to allow 
      attributes from other namespaces to be added.
      </xs:documentation> 
    </xs:annotation> 
    <xs:complexContent> 
      <xs:extension base="wsdl:DocumentedType"> 
	    <xs:anyAttribute namespace="##other" processContents="lax"/> 
      </xs:extension> 
    </xs:complexContent> 
  </xs:complexType> 
 
  <!-- description element decl and type def --> 
  <xs:element name="description" type="wsdl:DescriptionType"> 
    <xs:unique name="interface"> 
      <xs:selector xpath="wsdl:interface"/> 
      <xs:field xpath="@name"/> 
    </xs:unique> 
    <xs:unique name="binding"> 
      <xs:selector xpath="wsdl:binding"/> 
      <xs:field xpath="@name"/> 
    </xs:unique> 
    <xs:unique name="service"> 
      <xs:selector xpath="wsdl:service"/> 
      <xs:field xpath="@name"/> 
    </xs:unique> 
  </xs:element> 
 
  <xs:complexType name="DescriptionType" mixed="false"> 
    <xs:annotation> 
      <xs:documentation> 
        Although correct, this type declaration does not capture
        all the constraints on the contents of the wsdl:description
        element as defined by the WSDL 2.0 specification.
 
        In particular, the ordering constraints wrt elements preceding
        and following the wsdl:types child element are not captured, as
        attempts to incorporate such restrictions in the schema
        ran afoul of the UPA (Unique Particle Attribution) rule
        in the XML Schema language.
 
        Please refer to the WSDL 2.0 specification for
	additional information on the contents of this type.
      </xs:documentation> 
    </xs:annotation> 
    <xs:complexContent> 
      <xs:extension base="wsdl:ExtensibleDocumentedType"> 
        <xs:choice minOccurs="0" maxOccurs="unbounded"> 
          <xs:element ref="wsdl:import"/> 
          <xs:element ref="wsdl:include"/> 
          <xs:element ref="wsdl:types"/> 
          <xs:element ref="wsdl:interface"/> 
	      <xs:element ref="wsdl:binding"/> 
	      <xs:element ref="wsdl:service"/> 
          <xs:any namespace="##other" processContents="lax" minOccurs="1" maxOccurs="1"/> 
        </xs:choice> 
	<xs:attribute name="targetNamespace" type="xs:anyURI" use="required"/> 
      </xs:extension> 
    </xs:complexContent> 
  </xs:complexType> 
 
  <!-- types for import and include elements --> 
  <xs:element name="import" type="wsdl:ImportType"/> 
  <xs:complexType name="ImportType" mixed="false"> 
    <xs:complexContent> 
      <xs:extension base="wsdl:ExtensibleDocumentedType"> 
	    <xs:sequence> 
	      <xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded" processContents="strict"/> 
	    </xs:sequence> 
        <xs:attribute name="namespace" type="xs:anyURI" use="required"/> 
        <xs:attribute name="location" type="xs:anyURI" use="optional"/> 
      </xs:extension> 
    </xs:complexContent> 
  </xs:complexType> 
 
  <xs:element name="include" type="wsdl:IncludeType"/> 
  <xs:complexType name="IncludeType" mixed="false"> 
    <xs:complexContent> 
      <xs:extension base="wsdl:ExtensibleDocumentedType"> 
	    <xs:sequence> 
	      <xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded" processContents="strict"/> 
	    </xs:sequence> 
        <xs:attribute name="location" type="xs:anyURI" use="required"/> 
      </xs:extension> 
    </xs:complexContent> 
  </xs:complexType> 
 
  <xs:element name="types" type="wsdl:TypesType"/> 
  <xs:complexType name="TypesType" mixed="false"> 
    <xs:complexContent> 
      <xs:extension base="wsdl:ExtensibleDocumentedType"> 
	    <xs:sequence> 
	      <xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded" processContents="strict"/> 
	    </xs:sequence> 
      </xs:extension> 
    </xs:complexContent> 
  </xs:complexType> 
 
  <!-- parts related to wsdl:interface --> 
  <xs:element name="interface" type="wsdl:InterfaceType"> 
	<xs:unique name="operation"> 
	  <xs:selector xpath="wsdl:operation"/> 
	  <xs:field xpath="@name"/> 
	</xs:unique> 
	<xs:unique name="fault"> 
	  <xs:selector xpath="wsdl:fault"/> 
	  <xs:field xpath="@name"/> 
	</xs:unique> 
  </xs:element> 
  <xs:complexType name="InterfaceType" mixed="false"> 
    <xs:complexContent> 
      <xs:extension base="wsdl:ExtensibleDocumentedType"> 
        <xs:choice minOccurs="0" maxOccurs="unbounded"> 
          <xs:element name="operation" type="wsdl:InterfaceOperationType"/> 
          <xs:element name="fault" type="wsdl:InterfaceFaultType"/> 
          <xs:any namespace="##other" processContents="lax" minOccurs="1" maxOccurs="1"/> 
        </xs:choice> 
        <xs:attribute name="name" type="xs:NCName" use="required"/> 
        <xs:attribute name="extends" use="optional"> 
		  <xs:simpleType> 
		    <xs:list itemType="xs:QName"/> 
		  </xs:simpleType> 
	</xs:attribute> 
        <xs:attribute name="styleDefault" use="optional"> 
		  <xs:simpleType> 
		    <xs:list itemType="xs:anyURI"/> 
		  </xs:simpleType> 
	</xs:attribute> 
      </xs:extension> 
    </xs:complexContent> 
  </xs:complexType> 
 
  <xs:complexType name="InterfaceOperationType" mixed="false"> 
    <xs:complexContent> 
      <xs:extension base="wsdl:ExtensibleDocumentedType"> 
        <xs:choice minOccurs="0" maxOccurs="unbounded"> 
          <xs:element name="input" type="wsdl:MessageRefType"/> 
          <xs:element name="output" type="wsdl:MessageRefType"/> 
          <xs:element name="infault" type="wsdl:MessageRefFaultType"/> 
          <xs:element name="outfault" type="wsdl:MessageRefFaultType"/> 
          <xs:any namespace="##other" processContents="lax" minOccurs="1" maxOccurs="1"/> 
        </xs:choice> 
        <xs:attribute name="name" type="xs:NCName" use="required"/> 
        <xs:attribute name="pattern" type="xs:anyURI" use="optional"/> 
        <xs:attribute name="safe" type="xs:boolean" use="optional"/> 
        <xs:attribute name="style" type="xs:anyURI" use="optional"/> 
      </xs:extension> 
    </xs:complexContent> 
  </xs:complexType> 
 
  <xs:complexType name="MessageRefType" mixed="false"> 
    <xs:complexContent> 
      <xs:extension base="wsdl:ExtensibleDocumentedType"> 
        <xs:choice minOccurs="0" maxOccurs="unbounded"> 
          <xs:any namespace="##other" processContents="lax" minOccurs="1" maxOccurs="1"/> 
        </xs:choice> 
        <xs:attribute name="messageLabel" type="xs:NCName" use="optional"/> 
        <xs:attribute name="element" type="wsdl:ElementReferenceType" use="optional"/> 
      </xs:extension> 
    </xs:complexContent> 
  </xs:complexType> 
 
  <xs:simpleType name="ElementReferenceType"> 
    <xs:annotation> 
      <xs:documentation> 
      Use the QName of a GED that describes the content, 
      #any for any content, 
      #none for empty content, or 
      #other for content described by some other extension attribute that references a declaration in a non-XML extension type system.
      </xs:documentation> 
    </xs:annotation> 
    <xs:union memberTypes="xs:QName"> 
      <xs:simpleType> 
        <xs:restriction base="xs:token"> 
          <xs:enumeration value="#any"/> 
          <xs:enumeration value="#none"/> 
          <xs:enumeration value="#other"/> 
        </xs:restriction> 
      </xs:simpleType> 
    </xs:union> 
  </xs:simpleType> 
 
  <xs:complexType name="MessageRefFaultType" mixed="false"> 
    <xs:complexContent> 
      <xs:extension base="wsdl:ExtensibleDocumentedType"> 
        <xs:choice minOccurs="0" maxOccurs="unbounded"> 
          <xs:any namespace="##other" processContents="lax" minOccurs="1" maxOccurs="1"/> 
        </xs:choice> 
        <xs:attribute name="ref" type="xs:QName" use="required"/> 
        <xs:attribute name="messageLabel" type="xs:NCName" use="optional"/> 
      </xs:extension> 
    </xs:complexContent> 
  </xs:complexType> 
 
  <xs:complexType name="InterfaceFaultType" mixed="false"> 
    <xs:complexContent> 
      <xs:extension base="wsdl:ExtensibleDocumentedType"> 
        <xs:choice minOccurs="0" maxOccurs="unbounded"> 
          <xs:any namespace="##other" processContents="lax" minOccurs="1" maxOccurs="1"/> 
        </xs:choice> 
        <xs:attribute name="name" type="xs:NCName" use="required"/> 
        <xs:attribute name="element" type="wsdl:ElementReferenceType" use="optional"/> 
      </xs:extension> 
    </xs:complexContent> 
  </xs:complexType> 
 
  <!-- types related to wsdl:binding --> 
  <xs:element name="binding" type="wsdl:BindingType"/> 
  <xs:complexType name="BindingType" mixed="false"> 
    <xs:complexContent> 
      <xs:extension base="wsdl:ExtensibleDocumentedType"> 
        <xs:choice minOccurs="0" maxOccurs="unbounded"> 
          <xs:element name="operation" type="wsdl:BindingOperationType"/> 
          <xs:element name="fault" type="wsdl:BindingFaultType"/> 
          <xs:any namespace="##other" processContents="lax" minOccurs="1" maxOccurs="1"/> 
        </xs:choice> 
        <xs:attribute name="name" type="xs:NCName" use="required"/> 
        <xs:attribute name="type" type="xs:anyURI" use="required"/> 
        <xs:attribute name="interface" type="xs:QName" use="optional"/> 
      </xs:extension> 
    </xs:complexContent> 
  </xs:complexType> 
 
  <xs:complexType name="BindingOperationType" mixed="false"> 
    <xs:complexContent> 
      <xs:extension base="wsdl:ExtensibleDocumentedType"> 
        <xs:choice minOccurs="0" maxOccurs="unbounded"> 
          <xs:element name="input" type="wsdl:BindingOperationMessageType"/> 
          <xs:element name="output" type="wsdl:BindingOperationMessageType"/> 
          <xs:element name="infault" type="wsdl:BindingOperationFaultType"/> 
          <xs:element name="outfault" type="wsdl:BindingOperationFaultType"/> 
          <xs:any namespace="##other" processContents="lax" minOccurs="1" maxOccurs="1"/> 
        </xs:choice> 
        <xs:attribute name="ref" type="xs:QName" use="required"/> 
      </xs:extension> 
    </xs:complexContent> 
  </xs:complexType> 
 
  <xs:complexType name="BindingOperationMessageType" mixed="false"> 
    <xs:complexContent> 
      <xs:extension base="wsdl:ExtensibleDocumentedType"> 
        <xs:choice minOccurs="0" maxOccurs="unbounded"> 
          <xs:any namespace="##other" processContents="lax" minOccurs="1" maxOccurs="1"/> 
        </xs:choice> 
        <xs:attribute name="messageLabel" type="xs:NCName" use="optional"/> 
      </xs:extension> 
    </xs:complexContent> 
  </xs:complexType> 
 
  <xs:complexType name="BindingOperationFaultType" mixed="false"> 
    <xs:complexContent> 
      <xs:extension base="wsdl:ExtensibleDocumentedType"> 
        <xs:choice minOccurs="0" maxOccurs="unbounded"> 
          <xs:any namespace="##other" processContents="lax" minOccurs="1" maxOccurs="1"/> 
        </xs:choice> 
        <xs:attribute name="ref" type="xs:QName" use="required"/> 
        <xs:attribute name="messageLabel" type="xs:NCName" use="optional"/> 
      </xs:extension> 
    </xs:complexContent> 
  </xs:complexType> 
 
  <xs:complexType name="BindingFaultType" mixed="false"> 
    <xs:complexContent> 
      <xs:extension base="wsdl:ExtensibleDocumentedType"> 
        <xs:choice minOccurs="0" maxOccurs="unbounded"> 
          <xs:any namespace="##other" processContents="lax" minOccurs="1" maxOccurs="1"/> 
        </xs:choice> 
        <xs:attribute name="ref" type="xs:QName" use="required"/> 
      </xs:extension> 
    </xs:complexContent> 
  </xs:complexType> 
 
  <!-- types related to service --> 
  <xs:element name="service" type="wsdl:ServiceType"> 
	<xs:unique name="endpoint"> 
	  <xs:selector xpath="wsdl:endpoint"/> 
	  <xs:field xpath="@name"/> 
	</xs:unique> 
  </xs:element> 
  <xs:complexType name="ServiceType" mixed="false"> 
    <xs:complexContent> 
      <xs:extension base="wsdl:ExtensibleDocumentedType"> 
        <xs:choice minOccurs="1" maxOccurs="unbounded"> 
          <xs:element ref="wsdl:endpoint"/> 
          <xs:any namespace="##other" processContents="lax" minOccurs="1" maxOccurs="1"/> 
        </xs:choice> 
        <xs:attribute name="name" type="xs:NCName" use="required"/> 
        <xs:attribute name="interface" type="xs:QName" use="required"/> 
      </xs:extension> 
    </xs:complexContent> 
  </xs:complexType> 
  
  <xs:element name="endpoint" type="wsdl:EndpointType"/> 
  <xs:complexType name="EndpointType" mixed="false"> 
    <xs:complexContent> 
      <xs:extension base="wsdl:ExtensibleDocumentedType"> 
        <xs:choice minOccurs="0" maxOccurs="unbounded"> 
          <xs:any namespace="##other" processContents="lax" minOccurs="1" maxOccurs="1"/> 
        </xs:choice> 
        <xs:attribute name="name" type="xs:NCName" use="required"/> 
        <xs:attribute name="binding" type="xs:QName" use="required"/> 
        <xs:attribute name="address" type="xs:anyURI" use="optional"/> 
      </xs:extension> 
    </xs:complexContent> 
  </xs:complexType> 
 
  <xs:attribute name="required" type="xs:boolean"/> 
 
  <xs:complexType name="ExtensionElement" abstract="true" mixed="false"> 
    <xs:annotation> 
	  <xs:documentation> 
	  This abstract type is intended to serve as the base type for
      extension elements. It includes the wsdl:required attribute
      which it is anticipated will be used by most extension elements
	  </xs:documentation> 
	</xs:annotation> 
    <xs:attribute ref="wsdl:required" use="optional"/> 
  </xs:complexType> 
 
</xs:schema> 